package rpcx_connect_centre

// DeviceInfo 调阅设备信息
type DeviceInfo struct {
	DeviceSipID  string //摄像头ID
	DeviceName   string //设备名称
	NvrDeviceID  string //Nvr ID
	NvrChannelID int64  //Nvr 通道ID
	DeviceTree   string //设备树(多级设备树)
}

type SubsetDevice struct {
	DeviceSipID      string //设备名称
	DeviceName       string
	AccessSolutionID string //接入方案:  国标接入, 企标接入 , 非标接入, 第三方接入
	AddrIP           string
	Port             int64
	DccID            string  //链接中心ID
	ParentSipID      string  //父级设备
	ParentChannelID  int64   //父级通道ID
	Longitude        float64 //经度
	Latitude         float64 //纬度
	OnlineStatus     int     //在线状态 1=在线,2=下线 ,3=其他=故障
	DeviceTree       string  //设备树
}

// MediaCentreInfo 接收流数据的媒体中心
type MediaCentreInfo struct {
	IP                string //接收流数据的媒体中心IP
	Port              int64  //接收流数据的媒体中心Port
	NatPushStreamIp   string //外网 接收流数据的媒体中心IP
	NatPushStreamPort int64  //外网 接收流数据的媒体中心Port
	IsNat             bool   // 是否外网接入
}

// CommonResponse 通用响应
type CommonResponse struct {
	TID   string //事务id
	AppID string //应用ID
	Code  int64  `json:"code"`
	Msg   string `json:"msg"`
}

type RebootResponse struct {
	CommonResponse
	Urls []AddBusinessListener
}

type AddBusinessListener struct {
	BusinessName string
	Url          string
}

/* 设备调阅相关接口 */

// PlayParam 调阅请求参数
type PlayParam struct {
	DeviceInfo
	MediaCentreInfo        //推流媒体中心信息
	TID             string //事务id
	AppID           string //应用ID
	SSRC            string //SSRC
	StreamID        string //流ID  例: SSRC:deviceID:channelID
}

// HistoryPlayParam 历史调阅请求参数
type HistoryPlayParam struct {
	PlayParam
	StartTime int64
	EndTime   int64
}

// SipStreamOffsetParam 国标视频流跳转参数
type SipStreamOffsetParam struct {
	PlayParam
	OffsetTime int64 //跳转偏移量
}

// SipStreamScaleParam 国标视频流倍速参数
type SipStreamScaleParam struct {
	PlayParam
	ScaleType string //播放倍速类型
}

// RealPlayResponse 实时调阅响应
type RealPlayResponse struct {
	CommonResponse
	AppID         string //应用ID
	SSRC          string //SSRC
	StreamID      string //流ID  例: SSRC:deviceID:channelID
	PullStreamUrl string //拉流地址（三方接入）
	PlayID        string //历史视频标记
}

// PTZControlParam 设备控制请求参数
type PTZControlParam struct {
	DeviceInfo
	PTZCmd   string //云台控制命令
	PTZSpeed int64  //PTZ 速度，值越大，代表速度越快 1-255
	IsStop   bool   //是否停止
}

// PresetControlParam 设备预置点操作参数
type PresetControlParam struct {
	DeviceInfo
	PresetName string //预置点名称
	PresetCmd  uint8  //预置点命令 1=设置预置点, 2=清除预置点, 3=转到预置点
	PresetNum  int64  //预置点序号
}

// GuardControlParam 设备布防参数
type GuardControlParam struct {
	DeviceInfo
	IsCancel bool //是否取消布防
}

type GuardEventType int64

const (
	GUARD_EVENT_VMD        GuardEventType = 1 //移动侦测
	GUARD_EVENT_SHELTER    GuardEventType = 2 //遮挡报警
	GUARD_EVENT_ENTER_AREA GuardEventType = 3 //目标进入区域，支持区域规则
	GUARD_EVENT_EXIT_AREA  GuardEventType = 4 //目标离开区域，支持区域规则
)

// DeviceGuardInfoResponse 设备布防信息响应
type DeviceGuardInfoResponse struct {
	DeviceSipID    string `json:"deviceSipID"`
	ChannelID      int64  `json:"channelID"`
	GuardEventType `json:"guardEventType"`
	GuardInfo      string `json:"guardInfo"`
}

// DeviceGuardInfoReport 接入中心设备布防事件上报
type DeviceGuardInfoReport struct {
	DccID          string                  `json:"dccID"` //接入中心ID
	DeviceSipID    string                  `json:"deviceSipID"`
	ChannelID      int64                   `json:"channelID"`
	AlarmTime      int64                   `json:"alarmTime"` //上报时间
	GuardEventType `json:"guardEventType"` //上报事件类型
}

// CruiseControlParam 云台巡航控制参数
type CruiseControlParam struct {
	DeviceInfo
	CruiseCmdType uint8 //巡航控制命令类型
	CruiseRoute   int64 //巡航路径序号
	CruisePoint   int64 //巡航点序号
	CruiseData    int64 //参数值
}

// SubscribeParam 设备订阅参数
type SubscribeParam struct {
	DeviceInfo
	StartAlarmPriority int64  //起始报警级别
	EndAlarmPriority   int64  //终止报警级别
	AlarmMethod        int64  //报警方式
	PicServer          string //图片服务地址
	IsCancel           bool   //是否是取消订阅
	SubscribeType      uint8  //订阅事件类型 1-目录订阅，2-报警事件订阅，3-移动设备位置通知事件
}

// HistoryFileListResponse 历史文件列表查询响应
type HistoryFileListResponse struct {
	CommonResponse
	DeviceHistoryList []*DeviceHistoryInfo //国标为空（结果异步返回）
}

// DeviceHistoryInfo 历史文件信息
type DeviceHistoryInfo struct {
	DeviceID  string //设备ID
	FileSize  int64  //文件大小
	FileName  string //文件名称
	StartTime int64  //开始时间
	EndTime   int64  //结束时间
}

// 视频录像
type VideoRecord struct {
	DeviceID  string
	StreamID  string
	StartTime int64 //开始时间
	EndTime   int64 //结束时间
	FileList
}

type FileList map[string]string // key = 时间-output_编号.mp4  v = "url地址 "

// PushStreamListResponse 正在推流列表响应
type PushStreamListResponse struct {
	CommonResponse
	ConnectCentreID string //接入中心ID
	StreamInfoList  []*StreamInfo
}

// StreamInfo 流信息
type StreamInfo struct {
	DeviceInfo                  //设备信息
	StreamID    string          //流ID
	SSRC        string          //SSRC
	AppID       string          //应用ID
	MediaCentre MediaCentreInfo //推流媒体中心信息
}

// LoginOutParam 设备注销参数
type LoginOutParam struct {
	DeviceInfo
	IsDelete    bool
	DeviceSipID string
}

// ModifyInfoParam 设备信息参数
type ModifyInfoParam struct {
	DeviceInfo
	ProtocolVersion   string //协议版本
	ConnectSolutionID string //接入方案ID
	DeviceName        string //设备名称
}

type AlarmEventType int64

// 设备报警事件类型
const (
	ALARM_EVENT_VMD            AlarmEventType = 1  //移动侦测
	ALARM_EVENT_SHELTER        AlarmEventType = 2  //遮挡报警
	ALARM_EVENT_ENTER_AREA     AlarmEventType = 3  //目标进入区域,支持区域规则
	ALARM_EVENT_EXIT_AREA      AlarmEventType = 4  //目标离开区域,支持区域规则
	ALARM_EVENT_TRAVERSE_PLANE AlarmEventType = 5  //穿越警戒面
	ALARM_EVENT_INTRUSION      AlarmEventType = 6  //周界入侵,支持区域规则
	ALARM_EVENT_LOITER         AlarmEventType = 7  //徘徊,支持区域规则
	ALARM_EVENT_LEFT_TAKE      AlarmEventType = 8  //物品遗留拿取,支持区域规则
	ALARM_EVENT_PARKING        AlarmEventType = 9  //停车,支持区域规则
	ALARM_EVENT_RUN            AlarmEventType = 10 //快速移动,支持区域规则
	ALARM_EVENT_HIGH_DENSITY   AlarmEventType = 11 //区域内人员聚集,支持区域规则
	ALARM_EVENT_VIOLENT_MOTION AlarmEventType = 12 //剧烈运动检测
	ALARM_EVENT_REACH_HIGHT    AlarmEventType = 13 //攀高检测
	ALARM_EVENT_GET_UP         AlarmEventType = 14 //起身检测
	ALARM_EVENT_LEFT           AlarmEventType = 15 //物品遗留
	ALARM_EVENT_TAKE           AlarmEventType = 16 //物品拿取
	ALARM_EVENT_RUNNING        AlarmEventType = 17 //奔跑检测
	ALARM_EVENT_RETENTION      AlarmEventType = 18 //滞留检测
	ALARM_EVENT_PLAY_CELLPHONE AlarmEventType = 19 //玩手机检测
	ALARM_EVENT_DURATION       AlarmEventType = 20 //持续报警
)

// 上报报警参数
type ReportAlarmParam struct {
	ConnectCentreID string //接入中心ID
	DeviceInfo             //设备信息
	AlarmEventType         //报警事件类型
	AlarmTime       int64  //报警时间
}
